Django তে ডেকোরেটর হল একটি ফাংশন যা অন্য ফাংশন বা মেথডের আচরণ পরিবর্তন বা প্রসারিত করতে ব্যবহৃত হয়। Custom ডেকোরেটর তৈরি করে আপনি আপনার নিজস্ব ফাংশনালিটি যোগ করতে পারেন, যেমন অ্যাক্সেস কন্ট্রোল, লগিং, বা অন্যান্য সিস্টেম লজিক। Django তে বেশ কিছু বিল্ট-ইন ডেকোরেটর যেমন login_required ইত্যাদি রয়েছে, তবে আপনি কাস্টম ডেকোরেটর তৈরি করে আরো বিশেষ ব্যবহারের জন্য ডেকোরেটর তৈরি করতে পারেন।
Django তে Custom ডেকোরেটর তৈরি করার ধাপ
১. Custom ডেকোরেটর ফাংশন তৈরি করা
ডেকোরেটর সাধারণত একটি ফাংশন যা আরেকটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং তার উপর কোন ফাংশনালিটি প্রয়োগ করে। নিচে একটি সিম্পল কাস্টম ডেকোরেটর উদাহরণ দেওয়া হল, যা শুধুমাত্র সুপারইউজারদের অ্যাক্সেস দেয়।
from django.http import HttpResponseForbidden
def superuser_required(view_func):
def _wrapped_view(request, *args, **kwargs):
# চেক করে যে ইউজার সুপারইউজার কি না
if not request.user.is_superuser:
return HttpResponseForbidden("You do not have permission to view this page.")
return view_func(request, *args, **kwargs)
return _wrapped_view
এখানে:
superuser_required: এই ডেকোরেটরটি চেক করে যে ইউজার সুপারইউজার কিনা।_wrapped_view: এটি আসল ভিউ ফাংশন যা ডেকোরেটরের মধ্যে আবদ্ধ থাকে এবং ইনপুট হিসেবেrequestএবং অন্যান্য আর্গুমেন্ট গ্রহণ করে।
২. ডেকোরেটর ব্যবহার করা
একবার আপনি ডেকোরেটর তৈরি করলে, সেটি আপনার ভিউ ফাংশনে ব্যবহার করতে পারেন। ডেকোরেটরটি ব্যবহার করতে, আপনি সাধারণভাবে ভিউ ফাংশনে ডেকোরেটরটি প্রয়োগ করবেন:
from django.shortcuts import render
from .decorators import superuser_required
@superuser_required
def dashboard(request):
return render(request, 'dashboard.html')
এখানে:
@superuser_required: ডেকোরেটরটি ভিউ ফাংশনে প্রয়োগ করা হয়েছে। এর মাধ্যমে, শুধুমাত্র সুপারইউজাররাdashboardভিউটি অ্যাক্সেস করতে পারবে। অন্যান্য ব্যবহারকারীরাHttpResponseForbiddenরিটার্ন করবে।
৩. কাস্টম ডেকোরেটরের অন্যান্য উদাহরণ
ব্যবহারকারী লগইন চেক করা:
from django.http import HttpResponseRedirect
from django.urls import reverse
def login_required_custom(view_func):
def _wrapped_view(request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse('login'))
return view_func(request, *args, **kwargs)
return _wrapped_view
এখানে:
login_required_custom: যদি ইউজার লগইন না থাকে, তবে ইউজারকে লগইন পেজে রিডাইরেক্ট করবে।
ডেটা ভ্যালিডেশন চেক করা:
from django.http import HttpResponseBadRequest
def validate_data(view_func):
def _wrapped_view(request, *args, **kwargs):
data = request.POST.get('data')
if not data or len(data) < 5:
return HttpResponseBadRequest("Invalid data provided.")
return view_func(request, *args, **kwargs)
return _wrapped_view
এখানে:
validate_data: ইউজারের পাঠানো ডেটার ভ্যালিডেশন চেক করে, যদি ডেটা সঠিক না হয় তবেHttpResponseBadRequestফেরত পাঠায়।
কাস্টম ডেকোরেটর তৈরি করার সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: একাধিক ভিউতে একই ফাংশনালিটি প্রয়োগ করা সহজ হয়ে যায়।
- কোড সাদৃশ্য: ডেকোরেটর ব্যবহার করে কোড পরিষ্কার এবং সাদৃশ্যপূর্ণ থাকে।
- রিয়াসেবল লজিক: আপনি বিভিন্ন ধরনের লগিক ভিউ ফাংশনের বাইরে রাখতে পারেন, যার ফলে আপনার ভিউ ফাংশনগুলো আরও পরিষ্কার ও maintainable হয়।
এইভাবে Django তে আপনি আপনার কাস্টম ডেকোরেটর তৈরি করতে পারেন এবং বিভিন্ন প্রয়োজনে তা ব্যবহার করতে পারেন।
Read more